using System;
using Csla;
using MySql.Data.MySqlClient;
using ENT.GP.Datos.MysqlHelper;
using System.Data;
using ENT.GP.Core.Core;

namespace ENT.GP.Core.Tareas
{
    [Serializable]
    public class Tareas : BusinessBase<Tareas>
    {
        #region Business Methods

        private static PropertyInfo<int> IdProperty = RegisterProperty<int>(o => o.Id, "Name");
        public int Id
        {
            get { return GetProperty(IdProperty); }
            set { SetProperty(IdProperty, value); }
        }

        private static PropertyInfo<int> IdRolProperty = RegisterProperty<int>(o => o.IdRol, "Name");
        public int IdRol
        {
            get { return GetProperty(IdRolProperty); }
            set { SetProperty(IdRolProperty, value); }
        }

        private static PropertyInfo<int> IdUsuarioProperty = RegisterProperty<int>(o => o.IdUsuario, "Name");
        public int IdUsuario
        {
            get { return GetProperty(IdUsuarioProperty); }
            set { SetProperty(IdUsuarioProperty, value); }
        }

        private static PropertyInfo<int> IdProyectoProperty = RegisterProperty<int>(o => o.IdProyecto, "Name");
        public int IdProyecto
        {
            get { return GetProperty(IdProyectoProperty); }
            set { SetProperty(IdProyectoProperty, value); }
        }

        private static PropertyInfo<string> NombreProperty = RegisterProperty<string>(o => o.Nombre, "Name");
        public string Nombre
        {
            get { return GetProperty(NombreProperty); }
            set { SetProperty(NombreProperty, value); }
        }

        private static PropertyInfo<string> DescripcionProperty = RegisterProperty<string>(o => o.Descripcion, "Name");
        public string Descripcion
        {
            get { return GetProperty(DescripcionProperty); }
            set { SetProperty(DescripcionProperty, value); }
        }

        private static PropertyInfo<int> IdEstadoProperty = RegisterProperty<int>(o => o.IdEstado, "Name");
        public int IdEstado
        {
            get { return GetProperty(IdEstadoProperty); }
            set { SetProperty(IdEstadoProperty, value); }
        }


        private static PropertyInfo<DateTime> FechaProperty = RegisterProperty<DateTime>(o => o.Fecha, "Name");
        public DateTime Fecha
        {
            get { return GetProperty(FechaProperty); }
            set { SetProperty(FechaProperty, value); }
        }
        #endregion

        #region Validation Rules

        protected override void AddBusinessRules()
        {
            // TODO: add validation rules
            //ValidationRules.AddRule(RuleMethod, "");
        }

        #endregion

        #region Authorization Rules

        protected override void AddAuthorizationRules()
        {
            // TODO: add authorization rules
            //AuthorizationRules.AllowWrite("Name", "Role");
        }

        private static void AddObjectAuthorizationRules()
        {
            // TODO: add authorization rules
            //AuthorizationRules.AllowEdit(typeof(Tareas), "Role");
        }

        #endregion

        #region Factory Methods

        public static Tareas NuevaTarea()
        {
            return DataPortal.Create<Tareas>();
        }

        public static Tareas GetTareaNotificacion(int id)
        {
            return DataPortal.Fetch<Tareas>(
              new SingleCriteria<Tareas, int>(id));
        }

        public static void DeleteEditableRoot(int id)
        {
            DataPortal.Delete(new SingleCriteria<Tareas, int>(id));
        }

        private Tareas()
        { /* Require use of factory methods */ }

        #endregion

        #region Data Access

        [RunLocal]
        protected override void DataPortal_Create()
        {
            // TODO: load default values
            // omit this override if you have no defaults to set
            base.DataPortal_Create();
        }

        private void DataPortal_Fetch(SingleCriteria<Tareas, int> IdT)
        {
            DataSet dsDatos = new DataSet();
            HelperMySql objhm = HelperMySql.ObtenerConexion("");
            MySql.Data.MySqlClient.MySqlParameter[] parametros = new MySql.Data.MySqlClient.MySqlParameter[1];
            parametros[0] = new MySql.Data.MySqlClient.MySqlParameter("Id", IdT.Value);
            dsDatos = objhm.EjecutarStoreProcedure(parametros, "Obtener_Tarea_Notificacion");
            if (dsDatos.Tables[0].Rows.Count > 0)
            {
                LoadProperty(IdProperty, Convert.ToInt32(dsDatos.Tables[0].Rows[0][0].ToString()));
                LoadProperty(IdRolProperty, Convert.ToInt32(dsDatos.Tables[0].Rows[0][1].ToString()));
                LoadProperty(NombreProperty, dsDatos.Tables[0].Rows[0][2].ToString());
                LoadProperty(DescripcionProperty, dsDatos.Tables[0].Rows[0][3].ToString());
                LoadProperty(IdEstadoProperty, Convert.ToInt32(dsDatos.Tables[0].Rows[0][4].ToString()));
                LoadProperty(FechaProperty,Convert.ToDateTime( dsDatos.Tables[0].Rows[0][5].ToString()));
                LoadProperty(IdUsuarioProperty, Convert.ToInt32(dsDatos.Tables[0].Rows[0][6].ToString()));
                LoadProperty(IdProyectoProperty, Convert.ToInt32(dsDatos.Tables[0].Rows[0][7].ToString()));
            }
        }

        [Transactional(TransactionalTypes.TransactionScope)]
        protected override void DataPortal_Insert()
        {
            HelperMySql objhm = HelperMySql.ObtenerConexion("");
            MySql.Data.MySqlClient.MySqlParameter[] parametros = new MySql.Data.MySqlClient.MySqlParameter[7];
            try
            {
                parametros[0] = new MySql.Data.MySqlClient.MySqlParameter("IDROL",IdRol  );
                parametros[1] = new MySql.Data.MySqlClient.MySqlParameter("NOMBRE", Nombre );
                parametros[2] = new MySql.Data.MySqlClient.MySqlParameter("DESCRIPCION", Descripcion );
                parametros[3] = new MySql.Data.MySqlClient.MySqlParameter("IDESTADO", IdEstado );
		        parametros[4] = new MySql.Data.MySqlClient.MySqlParameter("FECHA", Fecha );
		        parametros[5] = new MySql.Data.MySqlClient.MySqlParameter("IDUSUARIO", IdUsuario );
                parametros[6] = new MySql.Data.MySqlClient.MySqlParameter("IDPROYECTO", IdProyecto);
                objhm.EjecutarStoreProcedure("Insertar_Tareas_Notificacion", parametros);
  
            }
            catch (Exception ex)
            {
                Util.RegistarLog(ex.ToString());
            }
        }

        [Transactional(TransactionalTypes.TransactionScope)]
        protected override void DataPortal_Update()
        {
            HelperMySql objhm = HelperMySql.ObtenerConexion("");
            MySql.Data.MySqlClient.MySqlParameter[] parametros = new MySql.Data.MySqlClient.MySqlParameter[7];
            try
            {
                parametros[0] = new MySql.Data.MySqlClient.MySqlParameter("IDTAREA_NOT",Id );
                parametros[1] = new MySql.Data.MySqlClient.MySqlParameter("IDROL", IdRol);
                parametros[2] = new MySql.Data.MySqlClient.MySqlParameter("NOMBRE", Nombre);
                parametros[3] = new MySql.Data.MySqlClient.MySqlParameter("DESCRIPCION", Descripcion);
		        parametros[4] = new MySql.Data.MySqlClient.MySqlParameter("IDESTADO", IdEstado);
                parametros[5] = new MySql.Data.MySqlClient.MySqlParameter("FECHA", Fecha);
		        parametros[6] = new MySql.Data.MySqlClient.MySqlParameter("IDUSUARIO", IdUsuario);

                objhm.EjecutarStoreProcedure("Actualizar_Tareas_Notificacion", parametros);

            }
            catch (Exception)
            {

                throw;
            }
        }
        

        [Transactional(TransactionalTypes.TransactionScope)]
        private void DataPortal_Delete(SingleCriteria<Tareas, int> criteria)
        {
            // TODO: delete values
        }

        #endregion
    }
}
